2.3 Market API¶
The following functions is used for get market inforamtion of exchange,
which are called from object exchange
or exchanges[x]
,for example:exchange.GetTicker()
or exchanges[0].GetTicker()
means return the market quotations.
Warning
When calling any API function that accesses the exchange API (such as GetTicker()
, Buy()
, CancelOrder()
, etc…), it may get access failure due to exchange server problem, the network transmission problem, and so on.
In this case, GetTicker()
will return null
, which may cause the stop of your programe. a JavaScript example to do fault tolerance as below.
var ticker = exchange.GetTicker()
if(ticker == null){
// Retry, or other processing logic.
}
A deflaut retry function is _C()
2.3.1 GetTicker¶
exchange.GetTicker()
Get the current market quotations.
Return value: Ticker structure
The Ticker structure contains the following variables:
Field | Type | Description |
---|---|---|
Info | Object | the original data returned by the exchange |
High | Number | Highest price |
Low | Number | lowest price |
Sell | Number | the latest selling price, also called bidPrice |
Buy | Number | the latest buying price, also called askPrice |
Last | Number | last traded price |
Volume | Number | most recent trading volume |
OpenInterest | Number | net position(only for features) |
Example ticker from binance:
{
"Info":{
"highPrice":"6173.01000000",
"openTime":1530152780326,
"firstId":53572675,
"lastId":53735989,
"count":163315,
"priceChange":"-266.96000000",
"weightedAvgPrice":"6035.81831943",
"bidPrice":"5871.63000000",
"openPrice":"6139.00000000",
"closeTime":1530239180326,
"lowPrice":"5827.00000000",
"quoteVolume":"197096315.23211791",
"priceChangePercent":"-4.349",
"prevClosePrice":"6139.00000000",
"lastQty":"0.25866000",
"bidQty":"0.00300000",
"askPrice":"5872.05000000",
"symbol":"BTCUSDT",
"lastPrice":"5872.04000000",
"askQty":"0.07344000",
"volume":"32654.44796400"
},
"High":6173.01,
"Low":5827,
"Sell":5872.05,
"Buy":5871.63,
"Last":5872.04,
"Volume":32654.447964,
"OpenInterest":0,
"Time":1530239180443
}
A JavaScript example using the variables in the Ticker structure:
function main(){
var ticker = exchange.GetTicker();
Log("High:", ticker.High, "Low:", ticker.Low, "Sell:", ticker.Sell)
}
For Python the code is basically the same:
def main():
ticker = exchange.GetTicker()
Log("High:", ticker.High, "Low:", ticker.Low, "Sell:", ticker.Sell)
Note
If you use the a number in Info
directly, make sure the data type is float.
- For JavaScript:
var priceChange = praseFloat(ticker.Info.priceChange);
- For Python:
priceChange = float(ticker.Info["priceChange"])
.
2.3.2 GetDepth¶
exchange.GetDepth()
Get the exchange order book.
Return value: Depth structure
The Depth structure contains the following variables:
Field | Type | Description |
---|---|---|
Asks | Array | the array of asks,from low to high by price |
Bids | Array | the array of bids,from high to low by price |
Time | Number | the timestamp of request |
The Asks and Bids structure contains the following variables:
Field | Type | Description |
---|---|---|
Price | Number | the pirce of ask or bid |
Amount | Number | the amount of ask or bid |
Example depth from binance:
{
"Info":null,
"Asks":[
{"Price":5866.38,"Amount":0.068644},
{"Price":5866.39,"Amount":0.263985},
{"Price":5866.73,"Amount":0.05},
{"Price":5866.77,"Amount":0.05},
{"Price":5867.01,"Amount":0.15},
{"Price":5875.89,"Amount":0.05},
......
]
"Bids":[
{"Price":5865.13,"Amount":0.001898},
{"Price":5865,"Amount":0.085575},
{"Price":5864.15,"Amount":0.013053},
{"Price":5863.65,"Amount":0.016727},
{"Price":5863.51,"Amount":0.128906},
{"Price":5863.15,"Amount":0.2}
......
],
"Time":1530241857399
}
A useful JavaScript example using depth:
function main(){
var depth = exchange.GetDepth();
var price = depth.Asks[0].Price;
var amount = depth.Asks[0].Amount;
if(amount > 10){
exchange.Buy(price, 10);
}
}
Note
GetDepth()
doesn’t return real depth at backtesting.
2.3.3 GetTrades¶
exchange.GetTrades()
Get Exchange Trading History.(not your trading history)
Return value: Array of Trade Structure
Note
Some exchanges do not support this method, the number of return data depends on exchanges.
The Trade structure contains the following variables:
Field | Type | Description |
---|---|---|
Time | Number | Unix timestamp of the trade time |
Price | Number | price of the trade |
Amount | Number | amount of the trade |
Type | Order Type | Order Type Constant |
Order Type is global constant, you can take ORDER_TYPE_BUY
as 0
:
Global constant | Meaning | Value |
---|---|---|
ORDER_TYPE_BUY | buy order | 0 |
ORDER_TYPE_SELL | sell order | 1 |
Example trades from binance:
[
{"Id":47317269,"Time":1530244709886,"Amount":0.002902,"Price":5884.38,"Type":1},
{"Id":47317270,"Time":1530244709886,"Amount":0.082102,"Price":5884.78,"Type":1},
{"Id":47317271,"Time":1530244713111,"Amount":0.122439,"Price":5884,"Type":0},
.....
{"Id":47317278,"Time":1530244717131,"Amount":0.000029,"Price":5884,"Type":0},
]
A useful JavaScript example using trades:
function main(){
while(true){
var trades = exchange.GetTrades();
for(var i=0;i<trades.length;i++){
if(trades[i].Type == ORDER_TYPE_BUY && trades[i].Amount > 100){
Log("Big amount buy order","time:", trades[0].Time, "Price:", trades[0].Price, "Amount:", trades[0].Amount);
}
}
Sleep(3000)//sleep 3 seconds
}
}
Warning
The trades in simulation backtesting is empty.
2.3.4 GetRecords¶
exchange.GetRecords(period)
exchange.GetRecords()
Get Exchange’s history K lines/Candlesticks data.
Parameter period
: K lines cycle, Optional Parameters, default K line cycle is set when start the robot.
All available values:
PERIOD_M1 : 1 minute,
PERIOD_M5 : 5 minutes,
PERIOD_M15 : 15 minutes,
PERIOD_M30 : 30 minutes,
PERIOD_H1 : 1 hour,
PERIOD_D1 : one day.
Return value: Record structure array. from old to recent by time.
The Record structure contains the following variables:
Field | Type | Description |
---|---|---|
Time | Number | Unix timestamp of the kline |
Open | Number | open price of the kline |
High | Number | highest price of the kline |
Low | Number | lowest price of the kline |
Close | Number | close price of the kline |
Volume | Number | trading volume |
Example Records from binance:
[
{"Time":1526616000000,"Open":7995,"High":8067.65,"Low":7986.6,"Close":8027.22,"Volume":9444676.27669432},
{"Time":1526619600000,"Open":8019.03,"High":8049.99,"Low":7982.78,"Close":8027,"Volume":5354251.80804935},
{"Time":1526623200000,"Open":8027.01,"High":8036.41,"Low":7955.24,"Close":7955.39,"Volume":6659842.42025361},
......
]
A useful JavaScript example using Records to get a close array:
function main(){
var close = [];
var records = exchange.GetRecords(PERIOD_H1);
for(var i=0;i<records.length;i++){
close.push(records[i].Close);
}
}
Note
- The K-lines data will accumulate over time, accumulating up to 2000, then will update one record at one K-line cycle, and delete the earliest one at the same time.
- If the exchange provides a K-line API. In this case, the data is obtained directly from the exchange.
- If the exchange does not provide a K-line API. your robot will using
GetTrades()
function to generate K-line each time the user calls GetRecords.In this case,Records length will be one when first start.